---@class GT.ui.control.label : GT.ui
---@field text Str 文本
---@field text_size Int32 字体大小
---@field min_size Int32 设置字体大小跟随内容自适应最小值(需要重新设置文本生效)
---@field align GT.ui.align 对齐方式
---@field color color 字体颜色
---@field is_open boolean 开启字体大小跟随内容自适应
---@field attr UnitKeyFloatAttr  单位属性
---@field u table<RoleID,GT.ui.control.label> 玩家独立数据驱动
---@field binding GT.ui.control.label
GT.ui.control.label = class(GT.ui, false)


---@class ui_data_label : ui_data
---@field text Str 文本
---@field text_size Int32 字体大小
---@field min_size Int32 设置字体大小跟随内容自适应最小值(需要重新设置文本生效)
---@field align GT.ui.align 对齐方式
---@field color color 字体颜色
---@field is_open boolean 开启字体大小跟随内容自适应
---@field attr UnitKeyFloatAttr  单位属性


--- 创建文本
---@param data ui_data_label
---@return GT.ui.control.label
function GT.ui.control.label:ctor(data)
    data.class=GT.ui.control.label
    if data.uid ~= nil then
        super(self, data)
       
    else
        
        data.u_type = GT.ui.type.text
        self.text = data.text
        self.size = data.size
        self.min_size = data.min_size
        self.align = data.align
        self.color = data.color
        self.is_open = data.is_open
        self.text_size = data.text_size
        self.attr = data.attr
        --创建控件
        super(self, data)
        --设置文本
        if self.text ~= nil then
            self:set_text(self.text)
        end
        if self.text_size ~= nil then
            self:set_text_size(self.text_size)
        end
        if self.min_size ~= nil then
            self:set_adaptive_min_size(self.min_size)
            self:set_text(self.text)
        end
        if self.align ~= nil then
            self:set_align(self.align)
        end
        if self.color ~= nil then
            self:set_text_color(self.color.r, self.color.g, self.color.b, self.color.a)
        end
        if self.is_open ~= nil then
            self:set_ui_comp_text_adaptive(self.is_open)
        end
        if self.attr ~= nil then
            self:bind_unit_attr(self.attr, nil)
        end
        
    end
    self:label_watch()
    return self
end



---转对象
---@param data ui_data_label
---@return GT.ui.control.label
function GT.ui.control.label.obj(data)
    return new(GT.ui.control.label, data)
end

---监听绑定
---@return GT.ui.control.label
function GT.ui.control.label:label_watch()
    ---@type bind_data[]
    local data =
    {
        {
            key = "attr",
            func = function(val, old)
                self.attr = val
                self:bind_unit_attr(self.attr, nil)
            end
        },
        {
            key = "text",
            func = function(val, old)
                self.text = val
                self:set_text(self.text)
            end
        },
        {
            key = "text_size",
            func = function(val, old)
                self.text_size = val
                self:set_text_size(self.text_size)
            end
        },
        {
            key = "min_size",
            func = function(val, old)
                self.min_size = val
                self:set_adaptive_min_size(self.min_size)
                self:set_text(self.text)
            end
        },
        {
            key = "align",
            func = function(val, old)
                self.align = val
                self:set_align(self.align)
            end
        },
        {
            key = "color",
            func = function(val, old)
                self.color = val
                self:set_text_color(self.color.r, self.color.g, self.color.b, self.color.a)
            end
        },
        {
            key = "is_open",
            func = function(val, old)
                self.is_open = val
                self:set_ui_comp_text_adaptive(self.is_open)
            end
        }

    }


    self.bind:add(data)
    return self
end

---设置文本
---@return GT.ui.control.label
function GT.ui.control.label:set_text(str)
    game_api.set_ui_comp_text(self.player.player, self.uid, tostring(str))


    return self
end

---设置文本大小
---@param  size Int32 大小
---@return GT.ui.control.label
function GT.ui.control.label:set_text_size(size)
    game_api.set_ui_comp_font_size(self.player.player, self.uid, Fix32(size))
    return self
end

---设置文本颜色
---@param  r float 红
---@param  g float 绿
---@param  b float 蓝
---@param  a float 透明
---@return GT.ui.control.label
function GT.ui.control.label:set_text_color(r, g, b, a)
    game_api.set_ui_comp_font_color(self.player.player, self.uid, Fix32(r), Fix32(g), Fix32(b), Fix32(a))
    return self
end

--- 设置字体大小跟随内容自适应最小值(需要重新设置文本生效)
---@param min_value Int32 最小值
---@return GT.ui.control.label
function GT.ui.control.label:set_adaptive_min_size(min_value)
    game_api.set_ui_comp_text_adaptive_min_size(self.player.player, min_value)
    return self
end

--- 开启字体大小跟随内容自适应
---@param is_open Bool 开启/关闭
function GT.ui.control.label:set_ui_comp_text_adaptive(is_open)
    game_api.set_ui_comp_text_adaptive(self.player.player, self.uid, is_open)
    return self
end

--- 设置控件文本对齐方式
---@param align_type Int32 对齐方式
---@return GT.ui.control.label
function GT.ui.control.label:set_align(align_type)
    game_api.set_ui_comp_align(self.player.player, self.uid, align_type)
    return self
end

--- -绑定单位属性到玩家界面控件的属性 文本
---@param attr UnitKeyFloatAttr  单位属性
---@param  accuracy integer 小数精度
function GT.ui.control.label:bind_unit_attr(attr, accuracy)
    self:bind_unit_attribute_to_player_ui_widget_attribute('text_bind', attr, accuracy)
end
